#include<iostream>
#include<pthread.h>
#include<mutex>
#include<functional>
#include<vector>
#include<unistd.h>

//主从Reactor模型（多reactor）

//server
//socket连接与线程管理
//监听、通信、超时

//超时
/*
    timerfd_create 创建一个定时器
    timerfd_create(clockid,flags)
    CLOCK_REALTIME 系统时间，CLOCK_MONOTONIC 以系统启动时间进行递增
    flags ：0阻塞
    
    timerfd_settime 启动定时器
    timerfd_settime(tfd,flags,struct itimerspec * new,struct itimerspec * old)
    flags 默认设置为0，（使用相对时间）
    new 设置超时时间 old 接受当前定时器原有的超时时间

    struct itimespec{
        tv_sec  秒
        tv_nsec 毫秒
    }
    struct itimerspec{
        struct itimespec it_interval 第一次超时后每次超时的间隔时间
        struct itimespec it_value 第一次超时时间
    }
    每隔一段时间向文件中写入一个数据
 */

//buffer缓冲区
/*  1.实现通信套接字的用户态缓冲区
    2.保证接受数据的完整性/发送时的状态
*/
class Buffer
{
public:
    Buffer():
    _buffer(1024),
    _read_idx(0),
    _write_idx(0)
    {}

    bool Size(){

    }
    ~Buffer(){}
private:
    std::vector<char> _buffer;//缓冲区
    uint64_t _read_idx;//相对读偏移量
    uint64_t _write_idx;//相对写偏移量
};

//socket 对socket进行封装
/*  对套接字的使用更加简洁
*/
class Sock
{
public:
    Sock(){}
    ~Sock(){}
private:
};
//channer 对IO事件进行管理
/*  描述符的监控事件在用户态更容易维护
*/
class Channer
{
public:

private:
};
//connection 对通信连接进行管理
/* 
*/
class Connection
{
public:

private:

};
//accept 对监听套接字进行管理 
/* 当获取了一个socket后，封装一个connection对象进行管理

*/
class Accect
{
public:

private:

};
//TimeqQueue 定时任务模块
/*  对于非活跃连接在一段时间后进行释放
*/
class TimeQueue
{
public:

private:

};
//poller 对任意的描述符进行IO事件监控（对epoll进行封装）
/*  对描述符进行时间监控的操作更加简单
*/
class Poller
{
public:

private:

};
//eventloop 进行事件监控管理模块（reactor）
/*
    每一个connection连接，都会绑定一个EventLoop模块和线程，即
        对于外界连接的所有操作，都要放在同一个线程中进行
*/
class EventLoop
{
public:

private:

};
//TcpServer 对所有模块进行整合，用于搭建一个高性能服务器模块
/*  让使用者可以更加轻松的晚餐一个服务器的搭建
*/ 
class TcpServer
{
public:

private:

};


















